package org.example.hashtable;

public class HashTable {

    private EmpLinkedList[] empLinkedListArray;
    private int size; //表示有多少条链表
    public HashTable(int size){
        this.size = size;
        //创建一个对象数组
        empLinkedListArray = new EmpLinkedList[size];
        for (int i=0; i<size; i++){
            //为对象数组的每一个元素创建一个新的链表对象
            empLinkedListArray[i] = new EmpLinkedList();
        }
    }


    public void add(Emp emp){
        //根据员工的id，得到该员工应当添加到那一条链表
        int empLinkedListNo = hashFun(emp.id);
        //将emp添加到对应的链表中
        empLinkedListArray[empLinkedListNo].add(emp);
    }

    public void findById(int id){

        int empLinkListNo = hashFun(id);
        Emp emp =  empLinkedListArray[empLinkListNo].findById(id);
        System.out.println(emp);
        if (emp == null){
            System.out.println("没有找到该员工");
        }else {
            System.out.printf("在第%d条链表中找到%d号员工", empLinkListNo, id);
            System.out.println();
        }
    }

    public void delById(int id){
        int empLinkListNo = hashFun(id);
        empLinkedListArray[empLinkListNo].delById(id);
    }

    //遍历所有的链表
    public void list(){
        for (int i = 0; i < size; i++){
            empLinkedListArray[i].list(i);
        }
    }


    //编写散列函数，使用一个简单取模法
    public int hashFun(int id){
        return id % size;
    }

}
